package com.adp.util;

import java.sql.Date;
import java.util.Hashtable;

/**
 * 该类继承java.util.Hashtable,并提供一些扩展的接口方法
 * 创建日期：(2002-12-10 14:13:58)
 * @version 1.0
 */
public class HashtableExtend
    extends Hashtable {
  /**
   * 构造方法
   */
  public HashtableExtend() {
    super();
  }

  /**
   * 带参数的构造方法
   * @param i 初始化尺寸
   */

  public HashtableExtend(int i) {
    super(i);
  }
  /**
   * 带参数的构造方法
   * @param i 初始化尺寸
   */

  public Object get(Object key){
    return super.get(key.toString().toUpperCase());
  }

  /**
   * 以byte[]类型取回hashtable中放的对象fieldName，若取回对象的length等于0，则返回format；若取回对象为null，则返回null；
   * 创建日期：(2002-12-10 14:13:58)
   * @deprecated 建议使用getBytes方法
   * @return byte[]
   * @param String fieldName
   * @param byte[] format
   */
  public byte[] getBlobBytes(String fieldName, byte[] format) {
    byte[] value;
    if (get(fieldName) != null) {
      value = (byte[]) get(fieldName);
      if (value.length == 0) {
        if (format != null && format.length > 0) {
          return format;
        }
      }
    }
    else {
      value = null;
      //System.out.println("hashtable里面没有相应数据--return Null");
    }
    return value;
  }

  /**
   * 将HashtableExtend对象里的fieldName对应字段取出来，转化成byte[]对象返回
   * @param fieldName 字段名称
   * @return 返回取出的对象
   */
  public byte[] getBytes(String fieldName) {
    byte[] value;
    if (get(fieldName) != null) {
      value = (byte[]) get(fieldName);
    }
    else {
      value = null;
      //System.out.println("hashtable里面没有相应数据--return Null");
    }
    return value;
  }

  /**
   * 将HashtableExtend对象里的fieldName对应字段取出来，转化成byte[]对象返回
   * @param fieldName 字段名称
   * @param defaultValue 默认值，如果得到的byte[]长度为0则返回它
   * @return 返回取出的对象，如果得到的byte[]长度为0则返回defaultValue
   */
  public byte[] getBytes(String fieldName, byte[] defaultValue) {
    byte[] value;
    if (get(fieldName) != null) {
      value = (byte[]) get(fieldName);
      if (value.length == 0) {
        if (defaultValue != null && defaultValue.length > 0) {
          return defaultValue;
        }
      }
    }
    else {
      value = null;
      //System.out.println("hashtable里面没有相应数据--return Null");

    }
    return value;
  }

  /**
   * 以Date类型取回hashtable中放的对象fieldName，若取回对象为null，则返回null；
   * 创建日期：(2002-12-10 14:13:58)
   * @param String fieldName
   * @return java.sql.Date
   */
  public Date getDate(String fieldName) {
    try {
      if (get(fieldName) != null && !get(fieldName).equals("null") && !get(fieldName).equals("")) {
        return new Date( ( (java.sql.Timestamp) get(fieldName)).getTime());
      }
      else {
        return null;
      }
    }
    catch (Exception e) {
      System.out.println(
          "-----------HashtableExtend.class getDate()----error---");
      e.printStackTrace(System.out);
    }
    return null;
  }

  /**
   * 以String类型取回hashtable中存放的fieldName对应的日期对象，若取回对象为null，则返回""（空字符传）；
   * @param fieldName 数据库中的字段名称
   * @return 该字段的字符串形式，没有内容则返回""；
   */
  public String getDateString(String fieldName) {
    Date d = getDate(fieldName);
    if (d == null) {
      return "";
    }
    else {
      return d.toString();
    }
  }

  /**
   * 以String类型取回hashtable中存放的fieldName对应的日期对象，若取回对象为null，则返回format；
   * @param fieldName
   * @param format
   * @return
   */
  public String getDateString(String fieldName, String format) {
    Date d = getDate(fieldName);
    if (d == null) {
      return format;
    }
    else {
      return d.toString();
    }
  }

  /**
       * 以String类型取回hashtable中放的对象fieldName，若取回对象等于""(空)，则返回format；若取回对象为null，则返回null；
   * 创建日期：(2002-12-10 14:13:58)
   * @return java.lang.String
   * @param String fieldName
   * @param String format
   */
  public String getNumerical(String fieldName, String format) {
    String value = "";
    if (get(fieldName) != null) {
      value = (String) get(fieldName);

      if (value.compareTo("") == 0) {
        if (format != null && format.compareTo("") != 0) {
          return format;
        }
      }
    }
    else {
      //System.out.println("hashtable里面没有相应数据");
      return null;
    }

    return value;
  }

  /**
   * 以String类型取回hashtable中放的对象fieldName，若取回对象为null，则返回null；
   * 创建日期：(2002-12-10 14:13:58)
   * @return java.lang.String
   * @param String fieldName
   */
  public String getString(String fieldName) {
    String value;
    if (get(fieldName) != null) {
      value = (String) get(fieldName);
      return value;
    }
    else {
      return null;
    }

  }

  /**
       * 以String类型取回hashtable中放的对象fieldName，若取回对象等于""(空)，则返回format；若取回对象为null，则返回null；
   * 创建日期：(2002-12-10 14:13:58)
   * @return java.lang.String
   * @param String fieldName
   * @param String format
   */
  public String getString(String fieldName, String format) {
    String value;
    if (get(fieldName) != null) {
      value = (String) get(fieldName);

      if (value.compareTo("") == 0) {
        if (format != null && format.compareTo("") != 0) {
          return format;
        }
      }
    }
    else {
      //System.out.println("hashtable里面没有相应数据");
      //如果该字段是null,则返回""
      return null;
    }
    return value;
  }

  /**
   * 以java.sql.Time类型取回hashtable中放的对象fieldName，若取回对象为null，则返回null；
   * 创建日期：(2002-12-10 14:13:58)
   * @return java.sql.Time
   * @param String fieldName
   */
  public java.sql.Time getTime(String fieldName) {
    if (get(fieldName) != null && !get(fieldName).equals("null") && !get(fieldName).equals("")) {
      return new java.sql.Time( ( (java.sql.Timestamp) get(fieldName)).
                               getTime());
    }
    else {
      return null;
    }
  }

  /**
   * 以java.sql. Timestamp类型取回hashtable中放的对象fieldName，若取回对象为null，则返回null；
   * 创建日期：(2002-12-10 14:13:58)
   * @return java.sql.Timestamp
   * @param String fieldName
   */
  public java.sql.Timestamp getTimestamp(String fieldName) {
    if (get(fieldName) != null && !get(fieldName).equals("null") && !get(fieldName).equals("")) {
      return new java.sql.Timestamp( ( (java.sql.Timestamp) get(fieldName)).
                                    getTime());
    }
    else {
      return null;
    }
  }
}
